Media streaming is a process for sending an audio/video presentation and other data from streaming media files or from live streaming sources from one location to another over a network, such as the Internet or an intranet. Typically, media streaming involves sending a streaming media file from a server to a client, where the streaming media file may be presented (viewed and/or listened to) using a media player. Media streaming may also be carried out peer-to-peer. Unlike non-streaming media transfer techniques, which require an entire media file to be transferred before it may be presented, media streaming allows presentation of portions of the streaming media file while it is being transmitted or streamed to the client.
Media streaming may be either unicast, where a streaming media file is streamed from a server to a single client, or multi-cast, where the streaming media file is streamed from a server to multiple clients. Additionally, media streaming may be either live, where a streaming media file including data representing a live event is streamed as it occurs, or on-demand, where the streaming media file is stored in a streaming media file and streamed when it is requested. On-demand media streaming is typically unicast, with a separate streaming event occurring between the server and each client.
A basic streaming media file typically includes at least two streams: a video stream and an audio stream. More complex streaming media file will include multiple video and/or audio streams, each stream being encoded at a different bit rate (i.e., multi-bit rate encoding). For example, a given portion or stream of video may be stored in a multiple bit rate encoded streaming media file in six different video streams, each stream being encoded at a different bit rate. When a client requests the streaming media file from the server, a determination is then made as to the bandwidth of the link between the server and the client. One of the six video streams and an audio stream are then selected for transmission to the client, based on predetermined bandwidth criteria. For example, the video and audio streams may be selected such that their combined bit rates are less than a predetermined percentage of the available link bandwidth. If, at some point in the streaming process, the link bandwidth between the server and the client increases or decreases, a different combination of audio and video streams is then selected to meet the predetermined bandwidth criteria. This type of “stream selection” from a multi-bit rate encoded streaming media file based on available bandwidth is commonly referred to as “intelligent streaming.”
In some client systems, the streaming experience is enhanced by caching some or all of the received streaming media file at the client prior to playing the streams. Caching the streams prior to playing them reduces the likelihood that a problem in the network connection will interrupt the play of the streaming media file at the client. Furthermore, in some systems, some minimal use of stream navigation (rewinding, replay) may me carried out using the cache.
One problem that currently exists with respect to multi-bit rate encoding and/or media stream caching is that there is no way for streams of varying bit rates or non-temporally adjacent streams to be stored and then accessed in a seamless manner, if at all. Typically, when a switch is made between media streams in a streaming media file due to a change in bandwidth, any previously cached portions of the streaming media file are discarded and a new stream cache is established. Similarly, when a jump is made between temporally non-adjacent locations in a streaming media file such as a seek operation, any previously cached portions of the streaming media file are discarded and a new stream cache is established.
The various systems, methods, and data structures described below address these and other problems.